import { ElMessage } from 'element-plus'

/**
 * 防抖指令
 * 使用方式：v-debounce="handler" 或 v-debounce:500="handler"
 */
export default {
  mounted(el, binding) {
    // 获取防抖时间，默认为300ms
    const delay = parseInt(binding.arg) || 300
    
    // 获取处理函数
    let handler = binding.value
    
    // 如果不是函数，则给出提示
    if (typeof handler !== 'function') {
      ElMessage.warning('v-debounce 指令需要绑定一个函数')
      return
    }
    
    // 防抖函数
    let timer = null
    
    // 创建新的处理函数
    el._debounceHandler = function(...args) {
      if (timer) {
        clearTimeout(timer)
      }
      
      timer = setTimeout(() => {
        handler.apply(this, args)
      }, delay)
    }
    
    // 添加事件监听
    el.addEventListener('click', el._debounceHandler)
  },
  
  beforeUnmount(el) {
    // 移除事件监听
    if (el._debounceHandler) {
      el.removeEventListener('click', el._debounceHandler)
    }
  }
}